package day15;

import java.util.*;

/*本类用于测试Map接口*/
public class TestMap {
    public static void main(String[] args) {
        //1.创建Map对象
        /*Map中的数据要符合映射规则,一定注意要同时指定 K 和 V 的数据类型
        * 至于这个K和V要指定成什么类型的数据,取决于你的具体需求 */
        Map<Integer,String> map = new HashMap<>();//注意导包:java.util

        //2.常用方法测试
        map.put(9527,"白骨精");//向集合中添加数据
        map.put(9528,"黑熊精");
        map.put(9528,"者行孙");
        map.put(9529,"黄毛怪");
        System.out.println(map);//查看集合中的元素
        /*总结1:Map中存放的都是无序的数据
        总结2 :Map中的key不可以重复,如果重复,此Key对应的Value会被覆盖
        打印结果:{9527=白骨精, 9528=者行孙, 9529=黄毛怪},没有黑熊精*/
        //3.测试常用方法
        //map.clear();//清空集合
        System.out.println(map.containsKey(9528));//true,查看是否包含指定的Key
        System.out.println(map.containsValue("土地老儿"));//false,查看是否包含指定的Value
        System.out.println(map.equals("者行孙"));//false,判断"者行孙"与map对象是否相等
        System.out.println(map.get(9528));//者行孙,根据指定的Key来获取对应的Value
        System.out.println(map.hashCode());//102939160,获取哈希码值
        System.out.println(map.isEmpty());//false,判断集合是否为空
        System.out.println(map.remove(9528));//删除指定的元素
        System.out.println(map.get(9528));//null,说明映射关系已被移出
        System.out.println(map.size());//2,获取集合中元素的个数
        Collection<String> values = map.values();//把map集合中的所有Vlaue收集起来放到Collection中
        System.out.println(values);//[白骨精, 黄毛怪]

        /*对map集合进行遍历/迭代*/
        /*方式一
        * 遍历map中的数据,但是map本身没有迭代器,所以需要转换成set集合
        * Set<Key> :把map集合中的所有Key存到set集合中--keySet()*/
        //1.将map中的key取出存入set集合,集合的泛型就是key的类型Integer
        Set<Integer> keySet = map.keySet();
        //2.想要遍历集合,先获取集合的迭代器对象
        Iterator<Integer> it = keySet.iterator();
        //3.循环遍历集合中的所有元素
        while(it.hasNext()){//判断是否有下个元素
            Integer key = it.next();//拿到当前遍历到的key
            String value = map.get(key);//通过刚刚拿到的key获取对应的value
            System.out.println("{"+key+"="+value+"}");
        }
        /*方式二
        遍历map数据,把map转成set集合,是把map中的一对Key&Value作为一个Entry整体放入Set
        一对 K V 是一个 Entry */
        //1.将map集合的每一对键值对作为Entry,逐一放入Set集合
        //所以set存的是Entry对象,Entry的类型是Entry<Integer,String>
        Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
        //2.获取set集合的迭代器Iterator<Map.Entry<Integer,String>>
        Iterator<Map.Entry<Integer,String>> it2 = entrySet.iterator();
        //3.循环遍历set集合中的元素
        while (it2.hasNext()){//如果有元素就继续遍历
            //4.获取当前集合遍历到的entry对象
            Map.Entry<Integer,String> entry = it2.next();
            Integer key = entry.getKey();//5.获取当前entry中存着的key
            String value = entry.getValue();//6.获取当前entry中存着的value
            System.out.println("{"+key+"="+value+"}");//7.拼接打印输出结果
        }
    }
}
